{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mean_squared_error(y, t):\n",
    "    return 0.5 * np.sum((y - t) ** 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = np.random.randint(10, size=10)\n",
    "y = y / np.sum(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "t = np.zeros(10)\n",
    "t[2] = 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.08571429 0.17142857 0.02857143 0.         0.17142857 0.11428571\n",
      " 0.17142857 0.02857143 0.02857143 0.2       ]\n",
      "[0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]\n"
     ]
    }
   ],
   "source": [
    "print(y, t, sep=\"\\n\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5469387755102041"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mean_squared_error(y, t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cross_entropy_error(y, t):\n",
    "    delta = 1e-7\n",
    "    return -np.sum(t * np.log(y + delta))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.555344561495539"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cross_entropy_error(y, t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys, os\n",
    "sys.path.append(os.pardir)\n",
    "from deep_learning_from_scratch.dataset.mnist import load_mnist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(60000, 784)\n",
      "(60000, 10)\n"
     ]
    }
   ],
   "source": [
    "print(x_train.shape)\n",
    "print(t_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_size = x_train.shape[0]\n",
    "batch_size = 10\n",
    "batch_mask = np.random.choice(train_size, batch_size)\n",
    "x_batch = x_train[batch_mask]\n",
    "t_batch = t_train[batch_mask]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# batched cross entropy\n",
    "def cross_entropy_error(y, t):\n",
    "    if y.ndim == 1:\n",
    "        t = t.reshape(1, t.size)\n",
    "        y = y.reshape(1, y.size)\n",
    "    batch_size = y.shape[0]\n",
    "    return -np.sum(t * np.log(y + 1e-7)) / batch_size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4 5 6 7 8 9]\n",
      "[0 1 2 3 4 5 6 7 8 9]\n"
     ]
    }
   ],
   "source": [
    "a = np.array([i for i in range(10)])\n",
    "print(a)\n",
    "a.reshape(1, a.size)\n",
    "print(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n",
      "[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n"
     ]
    }
   ],
   "source": [
    "a = np.zeros(10)\n",
    "print(a)\n",
    "a.reshape(1, a.size)\n",
    "print(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10, 784)\n",
      "(10, 10)\n",
      "(1, 7840)\n"
     ]
    }
   ],
   "source": [
    "print(x_batch.shape)\n",
    "print(t_batch.shape)\n",
    "print(x_batch.reshape(1, x_batch.size).shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "def function_1(x):\n",
    "    return 0.01*x**2 + 0.1*x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.arange(0, 20, 0.1)\n",
    "y = function_1(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"f(x)\")\n",
    "plt.plot(x, y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def numerical_diff(f, x):\n",
    "    h = 1e-4\n",
    "    return (f(x+h) - f(x-h)) / (2*h)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.1999999999990898"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numerical_diff(function_1, 5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.2999999999986347"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "numerical_diff(function_1, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.1999999999990898\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from deep_learning_from_scratch.ch04.gradient_1d import tangent_line"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.1999999999990898\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.arange(0, 20, 0.1)\n",
    "y = function_1(x)\n",
    "plt.xlabel(\"x\")\n",
    "plt.ylabel(\"f(x)\")\n",
    "\n",
    "tf = tangent_line(function_1, 5)\n",
    "y2 = tf(x)\n",
    "\n",
    "plt.plot(x, y)\n",
    "plt.plot(x, y2)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Partial derivative\n",
    "def function_2(x):\n",
    "    return np.sum(x**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "def numerical_gradient(f, x):\n",
    "    h = 1e-4\n",
    "    grad = np.zeros_like(x)\n",
    "    \n",
    "    for idx in range(x.size):\n",
    "        tmp_val = x[idx]\n",
    "        x[idx] = tmp_val + h\n",
    "        fxh1 = f(x)\n",
    "        \n",
    "        x[idx] = tmp_val - h\n",
    "        fxh2 = f(x)\n",
    "        \n",
    "        grad[idx] = (fxh1 - fxh2) / (2*h)\n",
    "        x[idx] = tmp_val\n",
    "        \n",
    "    return grad"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[6. 8.]\n"
     ]
    }
   ],
   "source": [
    "print(numerical_gradient(function_2, np.array([3., 4.])))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# coding: utf-8\n",
    "# cf.http://d.hatena.ne.jp/white_wheels/20100327/p3\n",
    "import numpy as np\n",
    "import matplotlib.pylab as plt\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "\n",
    "\n",
    "def _numerical_gradient_no_batch(f, x):\n",
    "    h = 1e-4  # 0.0001\n",
    "    grad = np.zeros_like(x)\n",
    "    \n",
    "    for idx in range(x.size):\n",
    "        tmp_val = x[idx]\n",
    "        x[idx] = float(tmp_val) + h\n",
    "        fxh1 = f(x)  # f(x+h)\n",
    "        \n",
    "        x[idx] = tmp_val - h \n",
    "        fxh2 = f(x)  # f(x-h)\n",
    "        grad[idx] = (fxh1 - fxh2) / (2*h)\n",
    "        \n",
    "        x[idx] = tmp_val  # 値を元に戻す\n",
    "        \n",
    "    return grad\n",
    "\n",
    "\n",
    "def numerical_gradient(f, X):\n",
    "    if X.ndim == 1:\n",
    "        return _numerical_gradient_no_batch(f, X)\n",
    "    else:\n",
    "        grad = np.zeros_like(X)\n",
    "        \n",
    "        for idx, x in enumerate(X):\n",
    "            grad[idx] = _numerical_gradient_no_batch(f, x)\n",
    "        \n",
    "        return grad\n",
    "\n",
    "\n",
    "def function_2(x):\n",
    "    if x.ndim == 1:\n",
    "        return np.sum(x**2)\n",
    "    else:\n",
    "        return np.sum(x**2, axis=1)\n",
    "\n",
    "\n",
    "def tangent_line(f, x):\n",
    "    d = numerical_gradient(f, x)\n",
    "    print(d)\n",
    "    y = f(x) - d*x\n",
    "    return lambda t: d*t + y\n",
    "\n",
    "\n",
    "if __name__ == '__main__':\n",
    "    x0 = np.arange(-2, 2.5, 0.25)\n",
    "    x1 = np.arange(-2, 2.5, 0.25)\n",
    "    X, Y = np.meshgrid(x0, x1)\n",
    "    \n",
    "    X = X.flatten()\n",
    "    Y = Y.flatten()\n",
    "    \n",
    "    grad = numerical_gradient(function_2, np.array([X, Y]))\n",
    "    \n",
    "    plt.figure()\n",
    "    plt.quiver(X, Y, -grad[0], -grad[1],  angles=\"xy\",color=\"#666666\")\n",
    "    plt.xlim([-2, 2])\n",
    "    plt.ylim([-2, 2])\n",
    "    plt.xlabel('x0')\n",
    "    plt.ylabel('x1')\n",
    "    plt.grid()\n",
    "    plt.draw()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradient_descent(f, init_x, lr=0.01, step_num=100):\n",
    "    x = init_x\n",
    "    \n",
    "    for i in range(step_num):\n",
    "        grad = numerical_gradient(f, x)\n",
    "        x -= lr * grad\n",
    "    \n",
    "    return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys, os\n",
    "sys.path.append(os.pardir)\n",
    "from deep_learning_from_scratch.common.functions import softmax, cross_entropy_error\n",
    "from deep_learning_from_scratch.common.gradient import numerical_gradient\n",
    "\n",
    "class simpleNet:\n",
    "    def __init__(self):\n",
    "        self.W = np.random.randn(2, 3)\n",
    "    \n",
    "    def predict(self, x):\n",
    "        return np.dot(x, self.W)\n",
    "    \n",
    "    def loss(self, x, t):\n",
    "        z = self.predict(x)\n",
    "        y = softmax(z)\n",
    "        loss = cross_entropy_error(y, t)\n",
    "        return loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net = simpleNet()\n",
    "x = np.array([0.6, 0.9])\n",
    "p = net.predict(x)\n",
    "np.argmax(p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6562089431919101"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "t = np.array([0, 0, 1])\n",
    "net.loss(x, t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(W):\n",
    "    return net.loss(x, t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "dW = numerical_gradient(f, net.W)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.23396786,  0.05474346, -0.28871132],\n",
       "       [ 0.3509518 ,  0.08211519, -0.43306699]])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dW"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "from deep_learning_from_scratch.common.functions import *\n",
    "from deep_learning_from_scratch.common.gradient import numerical_gradient"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "class TwoLayerNet:\n",
    "    def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01):\n",
    "        # initialize weight\n",
    "        self.params = {}\n",
    "        self.params[\"W1\"] = weight_init_std * np.random.randn(input_size, hidden_size)\n",
    "        self.params[\"b1\"] = np.zeros(hidden_size)\n",
    "        self.params[\"W2\"] = weight_init_std * np.random.randn(hidden_size, output_size)\n",
    "        self.params[\"b2\"] = np.zeros(output_size)\n",
    "    \n",
    "    def predict(self, x):\n",
    "        W1, W2 = self.params[\"W1\"], self.params[\"W2\"]\n",
    "        b1, b2 = self.params[\"b1\"], self.params[\"b2\"]\n",
    "        \n",
    "        a1 = np.dot(x, W1) + b1\n",
    "        z1 = sigmoid(a1)\n",
    "        a2 = np.dot(z1, W2) + b2\n",
    "        y = softmax(a2)\n",
    "        \n",
    "        return y\n",
    "    \n",
    "    # x: input data, t: label data(teacher data?)\n",
    "    def loss(self, x, t):\n",
    "        y = self.predict(x)\n",
    "        return cross_entropy_error(y, t)\n",
    "    \n",
    "    def accuracy(self, x, t):\n",
    "        y = self.predict(x)\n",
    "        y = np.argmax(y, axis=1)\n",
    "        t = np.argmax(t, axis=1)\n",
    "        \n",
    "        accuracy = np.sum(y == t) / float(x.shape[0])\n",
    "        return accuracy\n",
    "    \n",
    "    def numerical_gradient(self, x, t):\n",
    "        loss_W = lambda W: self.loss(x, t)\n",
    "        \n",
    "        grads = {}\n",
    "        grads[\"W1\"] = numerical_gradient(loss_W, self.params[\"W1\"])\n",
    "        grads[\"b1\"] = numerical_gradient(loss_W, self.params[\"b1\"])\n",
    "        grads[\"W2\"] = numerical_gradient(loss_W, self.params[\"W2\"])\n",
    "        grads[\"b2\"] = numerical_gradient(loss_W, self.params[\"b2\"])\n",
    "        \n",
    "        return grads"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(784, 100)\n",
      "(100,)\n",
      "(100, 10)\n",
      "(10,)\n"
     ]
    }
   ],
   "source": [
    "net = TwoLayerNet(input_size=784, hidden_size=100, output_size=10)\n",
    "print(net.params[\"W1\"].shape)\n",
    "print(net.params[\"b1\"].shape)\n",
    "print(net.params[\"W2\"].shape)\n",
    "print(net.params[\"b2\"].shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "\"\"\"\n",
    "with open(\"net_grads.pkl\", \"wb\") as f:\n",
    "    pickle.dump(grads, f)\n",
    "\"\"\"\n",
    "with open(\"net_grads.pkl\", \"rb\") as f:\n",
    "    grads = pickle.load(f)\n",
    "\n",
    "# pickleの中身確認用のコマンド\n",
    "# !python -m pickle net_grads.pkl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(784, 100)\n",
      "(100,)\n",
      "(100, 10)\n",
      "(10,)\n"
     ]
    }
   ],
   "source": [
    "x = np.random.rand(100, 784)\n",
    "y = np.random.rand(100, 10)\n",
    "# grads = net.numerical_gradient(x, y)\n",
    "print(grads[\"W1\"].shape)\n",
    "print(grads[\"b1\"].shape)\n",
    "print(grads[\"W2\"].shape)\n",
    "print(grads[\"b2\"].shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 速いやつ\n",
    "\n",
    "class TwoLayerNet:\n",
    "\n",
    "    def __init__(self, input_size, hidden_size, output_size, weight_init_std=0.01):\n",
    "        # 重みの初期化\n",
    "        self.params = {}\n",
    "        self.params['W1'] = weight_init_std * np.random.randn(input_size, hidden_size)\n",
    "        self.params['b1'] = np.zeros(hidden_size)\n",
    "        self.params['W2'] = weight_init_std * np.random.randn(hidden_size, output_size)\n",
    "        self.params['b2'] = np.zeros(output_size)\n",
    "\n",
    "    def predict(self, x):\n",
    "        W1, W2 = self.params['W1'], self.params['W2']\n",
    "        b1, b2 = self.params['b1'], self.params['b2']\n",
    "    \n",
    "        a1 = np.dot(x, W1) + b1\n",
    "        z1 = sigmoid(a1)\n",
    "        a2 = np.dot(z1, W2) + b2\n",
    "        y = softmax(a2)\n",
    "        \n",
    "        return y\n",
    "        \n",
    "    # x:入力データ, t:教師データ\n",
    "    def loss(self, x, t):\n",
    "        y = self.predict(x)\n",
    "        \n",
    "        return cross_entropy_error(y, t)\n",
    "    \n",
    "    def accuracy(self, x, t):\n",
    "        y = self.predict(x)\n",
    "        y = np.argmax(y, axis=1)\n",
    "        t = np.argmax(t, axis=1)\n",
    "        \n",
    "        accuracy = np.sum(y == t) / float(x.shape[0])\n",
    "        return accuracy\n",
    "        \n",
    "    # x:入力データ, t:教師データ\n",
    "    def numerical_gradient(self, x, t):\n",
    "        loss_W = lambda W: self.loss(x, t)\n",
    "        \n",
    "        grads = {}\n",
    "        grads['W1'] = numerical_gradient(loss_W, self.params['W1'])\n",
    "        grads['b1'] = numerical_gradient(loss_W, self.params['b1'])\n",
    "        grads['W2'] = numerical_gradient(loss_W, self.params['W2'])\n",
    "        grads['b2'] = numerical_gradient(loss_W, self.params['b2'])\n",
    "        \n",
    "        return grads\n",
    "        \n",
    "    def gradient(self, x, t):\n",
    "        W1, W2 = self.params['W1'], self.params['W2']\n",
    "        b1, b2 = self.params['b1'], self.params['b2']\n",
    "        grads = {}\n",
    "        \n",
    "        batch_num = x.shape[0]\n",
    "        \n",
    "        # forward\n",
    "        a1 = np.dot(x, W1) + b1\n",
    "        z1 = sigmoid(a1)\n",
    "        a2 = np.dot(z1, W2) + b2\n",
    "        y = softmax(a2)\n",
    "        \n",
    "        # backward\n",
    "        dy = (y - t) / batch_num\n",
    "        grads['W2'] = np.dot(z1.T, dy)\n",
    "        grads['b2'] = np.sum(dy, axis=0)\n",
    "        \n",
    "        dz1 = np.dot(dy, W2.T)\n",
    "        da1 = sigmoid_grad(a1) * dz1\n",
    "        grads['W1'] = np.dot(x.T, da1)\n",
    "        grads['b1'] = np.sum(da1, axis=0)\n",
    "\n",
    "        return grads"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train acc: 0.099, test acc: 0.103\n",
      "train acc: 0.796, test acc: 0.799\n",
      "train acc: 0.880, test acc: 0.885\n",
      "train acc: 0.899, test acc: 0.901\n",
      "train acc: 0.907, test acc: 0.910\n",
      "train acc: 0.914, test acc: 0.916\n",
      "train acc: 0.918, test acc: 0.920\n",
      "train acc: 0.924, test acc: 0.927\n",
      "train acc: 0.928, test acc: 0.932\n",
      "train acc: 0.931, test acc: 0.933\n",
      "train acc: 0.934, test acc: 0.936\n",
      "train acc: 0.937, test acc: 0.939\n",
      "train acc: 0.940, test acc: 0.940\n",
      "train acc: 0.941, test acc: 0.943\n",
      "train acc: 0.944, test acc: 0.943\n",
      "train acc: 0.946, test acc: 0.945\n",
      "train acc: 0.947, test acc: 0.946\n"
     ]
    }
   ],
   "source": [
    "(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True, one_hot_label=True)\n",
    "\n",
    "train_loss_list = []\n",
    "train_acc_list = []\n",
    "test_acc_list = []\n",
    "# repeat numbers of 1 epoch\n",
    "iter_per_epoch = max(train_size / batch_size, 1)\n",
    "\n",
    "# hyper parameter\n",
    "iters_num = 10000\n",
    "train_size = x_train.shape[0]\n",
    "batch_size = 100\n",
    "learning_rate = 0.1\n",
    "\n",
    "network = TwoLayerNet(input_size=784, hidden_size=50, output_size=10)\n",
    "\n",
    "for i in range(iters_num):\n",
    "    # get batch x and t\n",
    "    batch_mask = np.random.choice(train_size, batch_size)\n",
    "    x_batch = x_train[batch_mask]\n",
    "    t_batch = t_train[batch_mask]\n",
    "    \n",
    "    # compute gradient\n",
    "    grad = network.gradient(x_batch, t_batch)\n",
    "    \n",
    "    # update parameters\n",
    "    for key in network.params.keys():\n",
    "        network.params[key] -= learning_rate * grad[key]\n",
    "    \n",
    "    # track result of loss function\n",
    "    loss = network.loss(x_batch, t_batch)\n",
    "    train_loss_list.append(loss)\n",
    "    \n",
    "    # compute accuracy each epoch\n",
    "    if i % iter_per_epoch == 0:\n",
    "        train_acc = network.accuracy(x_train, t_train)\n",
    "        test_acc = network.accuracy(x_test, t_test)\n",
    "        train_acc_list.append(train_acc)\n",
    "        test_acc_list.append(test_acc)\n",
    "        print(f\"train acc: {train_acc:.3f}, test acc: {test_acc:.3f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(np.arange(0, len(train_loss_list)), train_loss_list)\n",
    "plt.xlim(0, 4000)\n",
    "plt.show()\n",
    "plt.plot(np.arange(0, len(train_acc_list)), train_acc_list)\n",
    "plt.plot(np.arange(0, len(test_acc_list)), test_acc_list)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
